#ifndef __SLOPE_HH__
#define __SLOPE_HH__
#include "../../includes/subproject-base.hh"
#include "base.hh"
#include "basis-function.hh"
// #include "../../includes/setting.hh"

extern BasisFunction basis;
class Slope : public Base{
public:
  Slope();
  virtual ~Slope();
  void get_slope(SubprojectBase* subproject,double* globalcoord, double* unitouternormal,double pillarlen,int i,int j, int currentdim, int* interscounter);
  // std::vector<std::array<double,gridsetting::dimension> > slopeleft;
  // std::vector<std::array<double,gridsetting::dimension> > sloperight;
  // std::vector<std::array<double,gridsetting::dimension> > slopecenter;
  // std::vector<std::array<double,gridsetting::dimension> > limitslope;
  // std::vector<std::array<double,gridsetting::dimension> > varleft;
  // std::vector<std::array<double,gridsetting::dimension> > varright;  
  std::vector<std::vector<double> > slopeleft;
  std::vector<std::vector<double> > sloperight;
  std::vector<std::vector<double> > slopecenter;
  std::vector<std::vector<double> > limitslope;
  std::vector<std::vector<double> > varleft;
  std::vector<std::vector<double> > varright;  
private:
  double minmod(double a, double b);
  double minmod3(double a, double b, double c);
  double maxmod(double a, double b);  
};
#endif  // __SLOPE_HH__
